﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GGLibSharp
{
    /// <summary>
    /// Sposób rozwiązywania nazw serwerów.
    /// </summary>
    public enum gg_resolver_t
    {
	    GG_RESOLVER_DEFAULT = 0,	/**< Domyślny sposób rozwiązywania nazw (jeden z poniższych) */
	    GG_RESOLVER_FORK,		    /**< Rozwiązywanie nazw bazujące na procesach */
	    GG_RESOLVER_PTHREAD,		/**< Rozwiązywanie nazw bazujące na wątkach */
	    GG_RESOLVER_WIN32,
	    GG_RESOLVER_CUSTOM,		    /**< Funkcje rozwiązywania nazw dostarczone przed aplikację */
	    GG_RESOLVER_INVALID = -1	/**< Nieprawidłowy sposób rozwiązywania nazw (wynik \c gg_session_get_resolver) */
    };

    /// <summary>
    /// Rodzaj kodowania znaków.
    /// </summary>
    public enum gg_encoding_t
    {
	    GG_ENCODING_CP1250 = 0,		/**< Kodowanie CP1250 */
	    GG_ENCODING_UTF8,		    /**< Kodowanie UTF-8 */
	    GG_ENCODING_INVALID = -1	/**< Nieprawidłowe kodowanie */
    };

    /// <summary>
    /// Rodzaj sesji.
    /// </summary>
    public enum gg_session_t
    {
        GG_SESSION_GG = 1,	        /**< Połączenie z serwerem Gadu-Gadu */
        GG_SESSION_HTTP,	        /**< Połączenie HTTP */
        GG_SESSION_SEARCH,	        /**< Wyszukiwanie w katalogu publicznym (nieaktualne) */
        GG_SESSION_REGISTER,	    /**< Rejestracja nowego konta */
        GG_SESSION_REMIND,	        /**< Przypominanie hasła */
        GG_SESSION_PASSWD,	        /**< Zmiana hasła */
        GG_SESSION_CHANGE,	        /**< Zmiana informacji w katalogu publicznym (nieaktualne) */
        GG_SESSION_DCC,		        /**< Połączenie bezpośrednie (do wersji 6.x) */
        GG_SESSION_DCC_SOCKET,	    /**< Gniazdo nasłuchujące (do wersji 6.x) */
        GG_SESSION_DCC_SEND,	    /**< Wysyłanie pliku (do wersji 6.x) */
        GG_SESSION_DCC_GET,	        /**< Odbieranie pliku (do wersji 6.x) */
        GG_SESSION_DCC_VOICE,	    /**< Rozmowa głosowa (do wersji 6.x) */
        GG_SESSION_USERLIST_GET,	/**< Import listy kontaktów z serwera (nieaktualne) */
        GG_SESSION_USERLIST_PUT,	/**< Eksport listy kontaktów do serwera (nieaktualne) */
        GG_SESSION_UNREGISTER,	    /**< Usuwanie konta */
        GG_SESSION_USERLIST_REMOVE,	/**< Usuwanie listy kontaktów z serwera (nieaktualne) */
        GG_SESSION_TOKEN,	        /**< Pobieranie tokenu */
        GG_SESSION_DCC7_SOCKET,	    /**< Gniazdo nasłuchujące (od wersji 7.x) */
        GG_SESSION_DCC7_SEND,	    /**< Wysyłanie pliku (od wersji 7.x) */
        GG_SESSION_DCC7_GET,	    /**< Odbieranie pliku (od wersji 7.x) */
        GG_SESSION_DCC7_VOICE,	    /**< Rozmowa głosowa (od wersji 7.x) */

        GG_SESSION_USER0 = 256,	    /**< Rodzaj zadeklarowany dla użytkownika */
        GG_SESSION_USER1,	        /**< Rodzaj zadeklarowany dla użytkownika */
        GG_SESSION_USER2,	        /**< Rodzaj zadeklarowany dla użytkownika */
        GG_SESSION_USER3,	        /**< Rodzaj zadeklarowany dla użytkownika */
        GG_SESSION_USER4,	        /**< Rodzaj zadeklarowany dla użytkownika */
        GG_SESSION_USER5,	        /**< Rodzaj zadeklarowany dla użytkownika */
        GG_SESSION_USER6,	        /**< Rodzaj zadeklarowany dla użytkownika */
        GG_SESSION_USER7	        /**< Rodzaj zadeklarowany dla użytkownika */
    };

    /// <summary>
    /// Aktualny stan sesji.
    /// </summary>
    public enum gg_state_t
    {
        /* wspólne */
        GG_STATE_IDLE = 0,		        /**< Nie dzieje się nic */
        GG_STATE_RESOLVING,             /**< Oczekiwanie na rozwiązanie nazwy serwera */
        GG_STATE_CONNECTING,            /**< Oczekiwanie na połączenie */
        GG_STATE_READING_DATA,		    /**< Oczekiwanie na dane */
        GG_STATE_ERROR,			        /**< Kod błędu w polu \c error */

        /* gg_session */
        GG_STATE_CONNECTING_HUB,	    /**< Oczekiwanie na połączenie z hubem */
        GG_STATE_CONNECTING_GG,         /**< Oczekiwanie na połączenie z serwerem */
        GG_STATE_READING_KEY,           /**< Oczekiwanie na klucz */
        GG_STATE_READING_REPLY,         /**< Oczekiwanie na odpowiedź serwera */
        GG_STATE_CONNECTED,             /**< Połączono z serwerem */

        /* gg_http */
        GG_STATE_SENDING_QUERY,		    /**< Wysłano zapytanie HTTP */
        GG_STATE_READING_HEADER,	    /**< Oczekiwanie na nagłówek HTTP */
        GG_STATE_PARSING,               /**< Przetwarzanie danych */
        GG_STATE_DONE,                  /**< Połączenie zakończone */

        /* gg_dcc */
        GG_STATE_LISTENING,		        /* czeka na połączenia */
        GG_STATE_READING_UIN_1,		    /* czeka na uin peera */
        GG_STATE_READING_UIN_2,		    /* czeka na swój uin */
        GG_STATE_SENDING_ACK,		    /* wysyła potwierdzenie dcc */
        GG_STATE_READING_ACK,		    /* czeka na potwierdzenie dcc */
        GG_STATE_READING_REQUEST,	    /* czeka na komendę */
        GG_STATE_SENDING_REQUEST,	    /* wysyła komendę */
        GG_STATE_SENDING_FILE_INFO,	    /* wysyła informacje o pliku */
        GG_STATE_READING_PRE_FILE_INFO,	/* czeka na pakiet przed file_info */
        GG_STATE_READING_FILE_INFO,	    /* czeka na informacje o pliku */
        GG_STATE_SENDING_FILE_ACK,	    /* wysyła potwierdzenie pliku */
        GG_STATE_READING_FILE_ACK,	    /* czeka na potwierdzenie pliku */
        GG_STATE_SENDING_FILE_HEADER,	/* wysyła nagłówek pliku */
        GG_STATE_READING_FILE_HEADER,	/* czeka na nagłówek */
        GG_STATE_GETTING_FILE,		    /* odbiera plik */
        GG_STATE_SENDING_FILE,		    /* wysyła plik */
        GG_STATE_READING_VOICE_ACK,	    /* czeka na potwierdzenie voip */
        GG_STATE_READING_VOICE_HEADER,	/* czeka na rodzaj bloku voip */
        GG_STATE_READING_VOICE_SIZE,	/* czeka na rozmiar bloku voip */
        GG_STATE_READING_VOICE_DATA,	/* czeka na dane voip */
        GG_STATE_SENDING_VOICE_ACK,	    /* wysyła potwierdzenie voip */
        GG_STATE_SENDING_VOICE_REQUEST,	/* wysyła żądanie voip */
        GG_STATE_READING_TYPE,		    /* czeka na typ połączenia */

        /* nowe. bez sensu jest to API. */
        GG_STATE_TLS_NEGOTIATION,	    /**< Negocjacja połączenia szyfrowanego */

        GG_STATE_REQUESTING_ID,		    /**< Oczekiwanie na nadanie identyfikatora połączenia bezpośredniego */
        GG_STATE_WAITING_FOR_ACCEPT,	/**< Oczekiwanie na potwierdzenie lub odrzucenie połączenia bezpośredniego */
        GG_STATE_WAITING_FOR_INFO,	    /**< Oczekiwanie na informacje o połączeniu bezpośrednim */

        GG_STATE_READING_ID,		    /**< Odebranie identyfikatora połączenia bezpośredniego */
        GG_STATE_SENDING_ID,		    /**< Wysłano identyfikator połączenia bezpośredniego */
        GG_STATE_RESOLVING_GG,		    /**< Oczekiwanie na rozwiązanie nazwy serwera Gadu-Gadu */

        GG_STATE_RESOLVING_RELAY,	    /**< Oczekiwanie na rozwiązanie nazwy serwera pośredniczącego */
        GG_STATE_CONNECTING_RELAY,	    /**< Oczekiwanie na połączenie z serwerem pośredniczącym */
        GG_STATE_READING_RELAY,		    /**< Odbieranie danych */

        GG_STATE_DISCONNECTING,		    /**< Oczekiwanie na potwierdzenie rozłączenia */
    };

    /// <summary>
    /// Informacja o tym, czy biblioteka chce zapisywać i/lub czytać z deskryptora. Maska bitowa.
    /// </summary>
    public enum gg_check_t
    {
        GG_CHECK_NONE = 0,		/**< Nie sprawdzaj niczego */
        GG_CHECK_WRITE = 1,		/**< Sprawdź możliwość zapisu */
        GG_CHECK_READ = 2		/**< Sprawdź możliwość odczytu */
    };

    /// <summary>
    /// Rodzaj zdarzenia.
    /// </summary>
    public enum gg_event_t
    {
        GG_EVENT_NONE = 0,		        /**< Nie wydarzyło się nic wartego uwagi */
        GG_EVENT_MSG,			        /**< \brief Otrzymano wiadomość. Przekazuje również wiadomości systemowe od numeru 0. */
        GG_EVENT_NOTIFY,		        /**< \brief Informacja o statusach osób z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. Ostatni element tablicy zawiera uin równy 0, a pozostałe pola są niezainicjowane. */
        GG_EVENT_NOTIFY_DESCR,		    /**< \brief Informacja o statusie opisowym osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. */
        GG_EVENT_STATUS,		        /**< \brief Zmiana statusu osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. */
        GG_EVENT_ACK,			        /**< Potwierdzenie doręczenia wiadomości */
        GG_EVENT_PONG,			        /**< \brief Utrzymanie połączenia. Obecnie serwer nie wysyła już do klienta ramek utrzymania połączenia, polega wyłącznie na wysyłaniu ramek przez klienta. */
        GG_EVENT_CONN_FAILED,		    /**< \brief Nie udało się połączyć */
        GG_EVENT_CONN_SUCCESS,		    /**< \brief Połączono z serwerem. Pierwszą rzeczą, jaką należy zrobić jest wysłanie listy kontaktów. */
        GG_EVENT_DISCONNECT,		    /**< \brief Serwer zrywa połączenie. Zdarza się, gdy równolegle do serwera podłączy się druga sesja i trzeba zerwać połączenie z pierwszą. */

        GG_EVENT_DCC_NEW,		        /**< Nowe połączenie bezpośrednie (6.x) */
        GG_EVENT_DCC_ERROR,		        /**< Błąd połączenia bezpośredniego (6.x) */
        GG_EVENT_DCC_DONE,		        /**< Zakończono połączenie bezpośrednie (6.x) */
        GG_EVENT_DCC_CLIENT_ACCEPT,	    /**< Moment akceptacji klienta w połączeniu bezpośrednim (6.x) */
        GG_EVENT_DCC_CALLBACK,		    /**< Zwrotne połączenie bezpośrednie (6.x) */
        GG_EVENT_DCC_NEED_FILE_INFO,    /**< Należy wypełnić \c file_info dla połączenia bezpośredniego (6.x) */
        GG_EVENT_DCC_NEED_FILE_ACK,	    /**< Czeka na potwierdzenie pliku w połączeniu bezpośrednim (6.x) */
        GG_EVENT_DCC_NEED_VOICE_ACK,    /**< Czeka na potwierdzenie rozmowy w połączeniu bezpośrednim (6.x) */
        GG_EVENT_DCC_VOICE_DATA, 	    /**< Dane bezpośredniego połączenia głosowego (6.x) */

        GG_EVENT_PUBDIR50_SEARCH_REPLY,	/**< Odpowiedź katalogu publicznego */
        GG_EVENT_PUBDIR50_READ,		    /**< Odczytano własne dane z katalogu publicznego */
        GG_EVENT_PUBDIR50_WRITE,	    /**< Zmieniono własne dane w katalogu publicznym */

        GG_EVENT_STATUS60,		        /**< Zmiana statusu osoby z listy kontaktów */
        GG_EVENT_NOTIFY60,		        /**< Informacja o statusach osób z listy kontaktów. Ostatni element tablicy zawiera uin równy 0, a pozostałe pola są niezainicjowane.  */
        GG_EVENT_USERLIST,		        /**< Wynik importu lub eksportu listy kontaktów */
        GG_EVENT_IMAGE_REQUEST,		    /**< Żądanie przesłania obrazka z wiadomości */
        GG_EVENT_IMAGE_REPLY,		    /**< Przysłano obrazek z wiadomości */
        GG_EVENT_DCC_ACK,		        /**< Potwierdzenie transmisji w połączeniu bezpośrednim (6.x) */

        GG_EVENT_DCC7_NEW,		        /**< Nowe połączenie bezpośrednie (7.x) */
        GG_EVENT_DCC7_ACCEPT,		    /**< Zaakceptowano połączenie bezpośrednie (7.x), nowy deskryptor */
        GG_EVENT_DCC7_REJECT,		    /**< Odrzucono połączenie bezpośrednie (7.x) */
        GG_EVENT_DCC7_CONNECTED,	    /**< Zestawiono połączenie bezpośrednie (7.x), nowy deskryptor */
        GG_EVENT_DCC7_ERROR,		    /**< Błąd połączenia bezpośredniego (7.x) */
        GG_EVENT_DCC7_DONE,		        /**< Zakończono połączenie bezpośrednie (7.x) */
        GG_EVENT_DCC7_PENDING,		    /**< Trwa próba połączenia bezpośredniego (7.x), nowy deskryptor */

        GG_EVENT_XML_EVENT,		        /**< Otrzymano komunikat systemowy (7.7) */
        GG_EVENT_DISCONNECT_ACK,	    /**< \brief Potwierdzenie zakończenia sesji. Informuje o tym, że zmiana stanu na niedostępny z opisem dotarła do serwera i można zakończyć połączenie TCP. */
        GG_EVENT_TYPING_NOTIFICATION,	/**< Powiadomienie o pisaniu */
        GG_EVENT_USER_DATA,		        /**< Informacja o kontaktach */
        GG_EVENT_MULTILOGON_MSG,	    /**< Wiadomość wysłana z innej sesji multilogowania */
        GG_EVENT_MULTILOGON_INFO,	    /**< Informacja o innych sesjach multilogowania */
    };

    /// <summary>
    /// Powód nieudanego połączenia.
    /// </summary>
    public enum gg_failure_t
    {
        GG_FAILURE_RESOLVING = 1,	/**< Nie znaleziono serwera */
        GG_FAILURE_CONNECTING,		/**< Błąd połączenia */
        GG_FAILURE_INVALID,		    /**< Serwer zwrócił nieprawidłowe dane */
        GG_FAILURE_READING,		    /**< Zerwano połączenie podczas odczytu */
        GG_FAILURE_WRITING,		    /**< Zerwano połączenie podczas zapisu */
        GG_FAILURE_PASSWORD,		/**< Nieprawidłowe hasło */
        GG_FAILURE_404, 		    /**< Nieużywane */
        GG_FAILURE_TLS,			    /**< Błąd negocjacji szyfrowanego połączenia */
        GG_FAILURE_NEED_EMAIL, 		/**< Serwer rozłączył nas z prośbą o zmianę adresu e-mail */
        GG_FAILURE_INTRUDER,		/**< Zbyt wiele prób połączenia z nieprawidłowym hasłem */
        GG_FAILURE_UNAVAILABLE		/**< Serwery są wyłączone */
    };

    /// <summary>
    /// Kod błędu danej operacji. Nie zawiera przesadnie szczegółowych informacji o powodach błędów, by nie komplikować ich obsługi. 
    /// Jeśli wymagana jest większa dokładność, należy sprawdzić zawartość zmiennej systemowej \c errno.
    /// </summary>
    public enum gg_error_t
    {
        GG_ERROR_RESOLVING = 1,		/**< Nie znaleziono hosta */
        GG_ERROR_CONNECTING,		/**< Błąd połączenia */
        GG_ERROR_READING,		    /**< Błąd odczytu/odbierania */
        GG_ERROR_WRITING,		    /**< Błąd zapisu/wysyłania */

        GG_ERROR_DCC_HANDSHAKE,		/**< Błąd negocjacji */
        GG_ERROR_DCC_FILE,		    /**< Błąd odczytu/zapisu pliku */
        GG_ERROR_DCC_EOF,		    /**< Przedwczesny koniec pliku */
        GG_ERROR_DCC_NET,		    /**< Błąd wysyłania/odbierania */
        GG_ERROR_DCC_REFUSED, 		/**< Połączenie odrzucone */

        GG_ERROR_DCC7_HANDSHAKE,	/**< Błąd negocjacji */
        GG_ERROR_DCC7_FILE,		    /**< Błąd odczytu/zapisu pliku */
        GG_ERROR_DCC7_EOF,		    /**< Przedwczesny koniec pliku */
        GG_ERROR_DCC7_NET,		    /**< Błąd wysyłania/odbierania */
        GG_ERROR_DCC7_REFUSED, 		/**< Połączenie odrzucone */
        GG_ERROR_DCC7_RELAY,		/**< Problem z serwerem pośredniczącym */
    };

    public enum Pubdir50
    {
        //Rodzaj pola zapytania.
	    GG_PUBDIR50_UIN,	                /**< Numer Gadu-Gadu */
	    GG_PUBDIR50_STATUS,	                /**< Status (tylko wynik wyszukiwania) */
	    GG_PUBDIR50_FIRSTNAME,	            /**< Imię */
	    GG_PUBDIR50_LASTNAME,	            /**< Nazwisko */
	    GG_PUBDIR50_NICKNAME,	            /**< Pseudonim */
	    GG_PUBDIR50_BIRTHYEAR,	            /**< Rok urodzenia lub przedział lat oddzielony spacją */
	    GG_PUBDIR50_CITY,	                /**< Miejscowość */
	    GG_PUBDIR50_GENDER,	                /**< Płeć */
	    GG_PUBDIR50_ACTIVE,	                /**< Osoba dostępna (tylko wyszukiwanie) */
	    GG_PUBDIR50_START,	                /**< Numer początkowy wyszukiwania (tylko wyszukiwanie) */
	    GG_PUBDIR50_FAMILYNAME,	            /**< Nazwisko rodowe (tylko wysyłanie informacji o sobie) */
	    GG_PUBDIR50_FAMILYCITY,	            /**< Miejscowość pochodzenia (tylko wysyłanie informacji o sobie) */

        //Wartość pola GG_PUBDIR50_GENDER przy wyszukiwaniu. Brak pola oznacza dowolną płeć.
        GG_PUBDIR50_GENDER_FEMALE = 0,	    /**< Kobieta */
        GG_PUBDIR50_GENDER_MALE = 1,	    /**< Mężczyzna */

        //Wartość pola GG_PUBDIR50_GENDER przy wysyłaniu informacji o sobie.
        GG_PUBDIR50_GENDER_SET_FEMALE = 0,	/**< Kobieta */
        GG_PUBDIR50_GENDER_SET_MALE = 1,    /**< Mężczyzna */

        //Wartość pola GG_PUBDIR50_ACTIVE.
        GG_PUBDIR50_ACTIVE_TRUE = 0,	    /**< Wyszukaj tylko osoby dostępne */

        //Rodzaj zapytania lub odpowiedzi katalogu publicznego.
        GG_PUBDIR50_WRITE = 0,	            /**< Wysłanie do serwera informacji o sobie */
        GG_PUBDIR50_READ,	                /**< Pobranie z serwera informacji o sobie */
        GG_PUBDIR50_SEARCH,	                /**< Wyszukiwanie w katalogu publicznym */
        GG_PUBDIR50_SEARCH_REPLY,	        /**< Wynik wyszukiwania w katalogu publicznym */
    };

    public enum Login
    {
        //Flagi opcji protokołu.
	    GG_FEATURE_MSG77,	        /**< Klient życzy sobie otrzymywać wiadomości zgodnie z protokołem 7.7 */
	    GG_FEATURE_STATUS77,	    /**< Klient życzy sobie otrzymywać zmiany stanu zgodnie z protokołem 7.7 */
	    GG_FEATURE_DND_FFC,	        /**< Klient obsługuje statusy "nie przeszkadzać" i "poGGadaj ze mną" */
	    GG_FEATURE_IMAGE_DESCR,	    /**< Klient obsługuje opisy graficzne oraz flagę \c GG_STATUS80_DESCR_MASK */
    };

    public enum Status
    {
        //Rodzaje statusów użytkownika.
	    GG_STATUS_NOT_AVAIL,		    /**< Niedostępny */
	    GG_STATUS_NOT_AVAIL_DESCR,	    /**< Niedostępny z opisem */
	    GG_STATUS_FFC,			        /**< PoGGadaj ze mną */
	    GG_STATUS_FFC_DESCR,		    /**< PoGGadaj ze mną z opisem */
	    GG_STATUS_AVAIL,		        /**< Dostępny */
	    GG_STATUS_AVAIL_DESCR,		    /**< Dostępny z opisem */
	    GG_STATUS_BUSY,			        /**< Zajęty */
	    GG_STATUS_BUSY_DESCR,		    /**< Zajęty z opisem */
	    GG_STATUS_DND,			        /**< Nie przeszkadzać */
	    GG_STATUS_DND_DESCR,		    /**< Nie przeszakdzać z opisem */
	    GG_STATUS_INVISIBLE,		    /**< Niewidoczny (tylko własny status) */
	    GG_STATUS_INVISIBLE_DESCR,	    /**< Niewidoczny z opisem (tylko własny status) */
	    GG_STATUS_BLOCKED,		        /**< Zablokowany (tylko status innych) */
	    GG_STATUS_IMAGE_MASK,		    /**< Flaga bitowa oznaczająca opis graficzny (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */
	    GG_STATUS_DESCR_MASK,		    /**< Flaga bitowa oznaczająca status z opisem (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */
	    GG_STATUS_FRIENDS_MASK,		    /**< Flaga bitowa dostępności tylko dla znajomych */

        //Rodzaje statusów użytkownika. Mapa bitowa.
        GG_STATUS_FLAG_UNKNOWN = 0,		    /**< Przeznaczenie nieznane, ale występuje zawsze */
        GG_STATUS_FLAG_VIDEO,		    /**< Klient obsługuje wideorozmowy */
        GG_STATUS_FLAG_MOBILE,		    /**< Klient mobilny (ikona telefonu komórkowego) */
        GG_STATUS_FLAG_SPAM,		    /**< Klient chce otrzymywać linki od nieznajomych */
    };

    public enum Contacts
    {
        //Rodzaj kontaktu.
	    GG_USER_NORMAL,		/**< Zwykły kontakt */
	    GG_USER_BLOCKED,	/**< Zablokowany */
	    GG_USER_OFFLINE,	/**< Niewidoczny dla kontaktu */
    };

    public enum Messages
    {
        // Klasy wiadomości. Wartości są maskami bitowymi, które w większości przypadków można 
        // łączyć (połączenie \c GG_CLASS_MSG i \c GG_CLASS_CHAT nie ma sensu).
	    GG_CLASS_MSG,		    /**< Wiadomość ma pojawić się w osobnym oknie */
	    GG_CLASS_CHAT,		    /**< Wiadomość ma pojawić się w oknie rozmowy */
	    GG_CLASS_CTCP,		    /**< Wiadomość przeznaczona dla klienta Gadu-Gadu */
	    GG_CLASS_ACK,		    /**< Klient nie życzy sobie potwierdzenia */
	    GG_CLASS_QUEUED,	    /**< Wiadomość zakolejkowana na serwerze (tylko przy odbieraniu) */

        //Atrybuty formatowania wiadomości.
        GG_FONT_BOLD = 0,
	    GG_FONT_ITALIC,
	    GG_FONT_UNDERLINE,
	    GG_FONT_COLOR,
	    GG_FONT_IMAGE,

        //Status doręczenia wiadomości.
        GG_ACK_DELIVERED,	    /**< Wiadomość dostarczono. */
        GG_ACK_QUEUED,		    /**< Wiadomość zakolejkowano z powodu niedostępności odbiorcy. */
        GG_ACK_BLOCKED,		    /**< Wiadomość zablokowana przez serwer (spam, świąteczne ograniczenia itd.) */
        GG_ACK_MBOXFULL,	    /**< Wiadomości nie dostarczono z powodu zapełnionej kolejki wiadomości odbiorcy. */
        GG_ACK_NOT_DELIVERED	/**< Wiadomości nie dostarczono (tylko dla \c GG_CLASS_CTCP). */
    };

    public enum ImportExport
    {
        //Rodzaj zapytania.
	    GG_USERLIST_PUT,	/**< Eksport listy kontaktów. */
	    GG_USERLIST_GET,	/**< Import listy kontaktów. */

        //Rodzaj odpowiedzi.
        GG_USERLIST_PUT_REPLY = 0,	/**< Wyeksportowano listy kontaktów. */
        GG_USERLIST_GET_REPLY,	/**< Zaimportowano listę kontaktów. */
    };
}
